package com.guoxue.util.codeSwitch;

/**
 * 代码开关类,用于对测试和打印代码的管理
 * 
 * @author zt
 * 
 */
public class CodeSwitch {
	private int level;
	public final int type;

	public boolean isOn() {
		if (this.level <= 0) {
			return false;
		}
		switch (this.type) {
		case TYPE_LOCAL:
			if (CodeSwitch.isLocalEdition == false) {
				return false;
			}
			break;
		case TYPE_OUT_LINUX:
			if (CodeSwitch.isOutLinuxEdition == false) {
				return false;
			}
			break;
		}
		return true;
	}

	public boolean isOff() {
		return !this.isOn();
	}

	/**
	 * 强制关闭开关,仅允许在服务器启动期间调用
	 * 
	 * @return
	 * @throws Exception
	 */
	public CodeSwitch turnOff() {
		// if (MainService.isInitFinished() == true) {
		// // GameException.throwException("CodeSwitch.turnOff err");
		// PrintBase.printFatalError("CodeSwitch.turnOff err", null);
		// }
		this.level = -100;
		return this;
	}

	/**
	 * 强制打开开关,仅允许在服务器启动期间调用
	 * 
	 * @return
	 * @throws Exception
	 */
	public CodeSwitch turnOn() {
		// if (MainService.isInitFinished() == true) {
		// // GameException.throwException("CodeSwitch.turnOn err");
		// PrintBase.printFatalError("CodeSwitch.turnOn err", null);
		// }
		this.level = 100;
		return this;
	}

	/**
	 * 构造函数
	 * 
	 * @param level
	 *            开关级别,大于服务器的当前代码级别,才会被打开(即数值越小,开关被打开的可能性越小)
	 * @param type
	 *            0和TYPE_NORMAL表示开关不区分本地环境和发布环境;TYPE_LOCAL表示开关仅在本地环境,才可能打开;
	 *            TYPE_RELEASE表示开关仅在发布环境,才可能打开
	 */
	public CodeSwitch(int level, int type) {
		this.level = level;
		this.type = type;
	}

	/**
	 * 构造函数
	 * 
	 * @param level
	 *            开关级别,大于服务器的当前代码级别,才会被打开
	 */
	public CodeSwitch(int level) {
		this.level = level;
		this.type = TYPE_NORMAL;
	}

	public static void setOutLinuxEdition(boolean isReleaseEdition) throws Exception {
		CodeSwitch.isOutLinuxEdition = isReleaseEdition;
		// if (isReleaseEdition == false) { // 内网版本,不能是linux
		// if (G.isLinux() == true) {
		// Sy.println("CodeSwitch.setReleaseEdition.err220");
		// }
		// } else { // 外网版本,必须是linux
		// if (G.isLinux() == false) {
		// Sy.println("CodeSwitch.setReleaseEdition.err240");
		// }
		// }
	}

	// public static boolean isReleaseEdition() {
	// return isReleaseEdition;
	// }

	public static void setLocalEdition(boolean isLocalEdition) throws Exception {
		CodeSwitch.isLocalEdition = isLocalEdition;
		// if (isLocalEdition == false) { // 外网版本,必须是linux
		// if (G.isLinux() == false) {
		// Sy.println("CodeSwitch.setLocalEdition.err220");
		// }
		// } else { // 内网版本,不能是linux
		// if (G.isLinux() == true) {
		// Sy.println("CodeSwitch.setLocalEdition.err240");
		// }
		// }
	}

	// public static boolean isLocalEdition() {
	// return isLocalEdition;
	// }

	public static final int TYPE_NORMAL = 0; // 开关不区分本地环境和发布环境
	public static final int TYPE_LOCAL = 1; // 开关仅在本地环境,才可能打开
	public static final int TYPE_OUT_LINUX = 2; // 开关仅在外网发布环境,才可能打开

	// public static boolean isDevelopEdition = true; // 仅对开发版本为true
	private static boolean isOutLinuxEdition = true; // 对发布版本为true
	static boolean isLocalEdition = false; // 仅在本地运行环境下为true

}
